home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_10_01 / cmenu.exe / DMENU.C < prev    next >
Text File  |  1991-10-23  |  3KB  |  118 lines

  1. /************************************************************
  2.  *    Program:    DMENU Menu Object File Analyzer
  3.  *  Module:        dmenu.c
  4.  *    dmenu.c:    Reads a menu object file, for debuging menu
  5.  *                compiler
  6.  *
  7.  *    Written by: Leor Zolman, 7/91
  8.  *
  9.  *    Menu object file format:
  10.  *    ---------------------------------------------------------
  11.  *        <count>            (integer count of # of menus in file)
  12.  *        MENU 1            (MENU structure for 1st Menu)
  13.  *            ITEM 1
  14.  *            ITEM 2
  15.  *            ...
  16.  *            ITEM n_items
  17.  *        MENU 2            (MENU structure for 2nd Menu)
  18.  *            ...
  19.  *        .
  20.  *        .
  21.  *        .
  22.  *        MENU <count>    (MENU structure for final Menu)
  23.  *            ...
  24.  *
  25.  *    ---------------------------------------------------------
  26.  *    Compile:
  27.  *        Xenix:    cc dmenu.c -o dmenu
  28.  *        DOS:    bcc dmenu.c        (Borland C++)
  29.  ************************************************************/
  30.  
  31. #include <stdio.h>
  32. #include "cmenu.h"
  33.  
  34. #define OK    0
  35.  
  36. MENU Menu;
  37. ITEM Item, *ip = &Item;
  38.  
  39. char obj_name[MAX_CMD];
  40. int n_menus;
  41.  
  42. int main(argc,argv)
  43. int argc;
  44. char **argv;
  45. {
  46.     register i, j;
  47.     int count;
  48.     FILE *fp;
  49.     
  50.     if (argc != 2)
  51.         exit(puts("usage: dmenu <menu-object>\n"));
  52.  
  53.     strcpy(obj_name, argv[1]);
  54.     strcat(obj_name, ".mnc");
  55.     
  56.     if ((fp = fopen(obj_name, "rb")) == NULL)
  57.     {
  58.         fprintf(stderr, 
  59.             "Cannot open %s for reading.\n", obj_name);
  60.         return ERROR;
  61.     }
  62.     
  63.     if (fread((Void *)&n_menus, sizeof n_menus, 1, fp) != 1)
  64.     {
  65.         fprintf(stderr,
  66.             "Error reading menu count from %s\n", obj_name);
  67.         return ERROR;
  68.     }
  69.     printf("Menu count = %d\n", n_menus);
  70.     
  71.     for (i = 0; i < n_menus; i++)
  72.     {
  73.         if (fread((Void *) &Menu, sizeof (MENU), 1, fp) != 1)
  74.         {
  75.             fprintf(stderr, 
  76.                 "Error reading from %s\n", obj_name);
  77.             return ERROR;
  78.         }
  79.  
  80.         printf("******** Start of Menu #%d: *********\n", i+1);
  81.         printf("\tTitle: %s\n", Menu.title);
  82.         printf("\tPath:  %s\n", Menu.path);
  83.         printf("\tContains %d items.\n", Menu.nitems);
  84.         printf("\talign =  %c\n", Menu.align);
  85.         printf("\tColumns = %d, ", Menu.columns);
  86.         printf("Spacing = %d, Widest = %d\n",
  87.                 Menu.spacing, Menu.widest);
  88.         printf("\tShell escapes are %sallowed",
  89.                 Menu.escape == YES ? "" : "NOT ");
  90.         printf("\n");
  91.         
  92.         for (j = 0; j < Menu.nitems; j++)
  93.         {
  94.             if (fread((Void *) ip, sizeof (ITEM), 1, fp) != 1)
  95.             {
  96.                 fprintf(stderr, 
  97.                     "Error reading from %s\n", obj_name);
  98.                 return ERROR;
  99.             }
  100.             printf("Item #%d:\n", j+1);
  101.             printf("\tTEXT =   %s\n", ip->text);
  102.             printf("\tPATH =   %s\n", ip->path);
  103.             printf("\tACTION = %s\n", ip->action);
  104.             printf("\tHELP =   %s\n", ip->help);
  105.             printf("pre-clear =  %c\n", ip->pre_clear);
  106.             printf("post-clear = %c\n", ip->post_clear);
  107.             printf("prompt =     %c\n", ip->prompt);
  108.             printf("acttyp =     %d\n", ip->acttyp);
  109.             printf("lmenunum =   %d\n", ip->lmenunum);
  110.             printf("nextcode =   %d\n", ip->nextcode);
  111.             printf("nextitem =   %d\n", ip->nextitem);
  112.             printf("\n");
  113.         }
  114.         printf("**** END OF MENU #%d ****\n", i+1);
  115.     }
  116.     return OK;
  117. }
  118.